// 分片的大小 5MB
export const CHUNK_SIZE = 5 * 1024 * 1024

// 分片处理
export const sliceChunks = (file: File, chunkSize: number = CHUNK_SIZE) => {
  const res = []
  for (let i = 0; i < file.size; i += chunkSize) {
    res.push(file.slice(i, i + chunkSize))
  }
  // console.log(res)
  return res
}

// 计算哈希====增量计算===不用
// export const calculateHash = (chunks: Blob[]) => {
//   return new Promise(resolve => {
//     // md5编码是在主线程的
//     const spark = new sprakMd5.ArrayBuffer()

//     function _read(i: number) {
//       if (i >= chunks.length) {
//         resolve(spark.end())
//         return
//       }

//       const reader = new FileReader()
//       // 读取Blob内容
//       reader.readAsArrayBuffer(chunks[i])

//       reader.onload = e => {
//         // ArrayBuffer 对象用来表示通用的原始二进制数据缓冲区
//         // 他是一个字节数组
//         const byte = e.target?.result as ArrayBuffer
//         // console.log(byte)
//         spark.append(byte)
//         _read(++i)
//       }
//     }

//     _read(0)
//   })
// }

// 计算哈希====增量计算====webworker 多线程计算
export const webWorkerHash = (chunks: Blob[]) => {
  return new Promise((resolve, reject) => {
    // 是在public文件夹下
    // const worker = new Worker('worker.js', {
    //   type: 'module'
    // })

    // 不要放在public下，否则引入第三方库报错
    const worker = new Worker(new URL('./worker.js', import.meta.url), { type: 'module' })

    // 发给子线程进行增量计算
    worker.postMessage(chunks)

    worker.onerror = e => {
      console.log(e)
    }

    worker.onmessage = e => {
      // 将获取的哈希值返回
      resolve(e.data)
      worker.terminate()
    }
  })
}
